#ifndef MODEL3D_H
#define MODEL3D_h

//#include "Point3d.h"
#include "Triangle3d.h"

#include <list>
#include <iterator>

namespace Geometry
  {
  
  class Model3d
    {
    public:
      Point3d* AddPoint(double i_x, double i_y, double i_z);
      Triangle3d* AddTriangle(const Point3d *ip_pt1, const Point3d *ip_pt2, const Point3d *ip_pt3);
      
      class PointIterator
        {
        public:
          PointIterator(std::list<Point3d>::const_iterator i_iterator);
          PointIterator& operator++();
          PointIterator operator++(int);

          const Point3d& operator*() const;
          bool operator != (const PointIterator& i_other) const;
        private:
          std::list<Point3d>::const_iterator m_iteator;
        };
      class TriangleIterator
        {
        public:

        private:

        };

      PointIterator BeginPoint() const;
      PointIterator EndPoint() const;

      TriangleIterator BeginTriangle() const;
      TriangleIterator EndTriangle() const;

    private:
      std::list<Point3d> m_points;
      std::list<Triangle3d> m_triangles;
    };

  }


#endif